/**
 * Copyright (C) 2013 DaiKit.com - daikit4gxt module (admin@daikit.com)
 *
 *         Project home : http://code.daikit.com/daikit4gxt
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *         http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.daikit.daikit4gxt.client.editor;

import com.google.gwt.editor.client.Editor;
import com.google.gwt.editor.client.EditorDelegate;
import com.google.gwt.editor.client.ValueAwareEditor;


/**
 * 
 * @author tcaselli
 * @version $Revision$ Last modifier: $Author$ Last commit: $Date$
 * @param <T>
 *           the bean type
 */
public class AbstractEditedBeanAwareEditor<T> implements ValueAwareEditor<T>, Editor<T>
{

	private T editedModel;
	private boolean dirty;
	private EditorDelegate<T> delegate;

	/**
	 * @return the editedModel
	 */
	public T getEditedModel()
	{
		return editedModel;
	}

	/**
	 * @param editedModel
	 *           the editedModel to set
	 */
	protected void setEditedModel(final T editedModel)
	{
		this.editedModel = editedModel;
	}

	/**
	 * @return the delegate
	 */
	public EditorDelegate<T> getDelegate()
	{
		return delegate;
	}

	/**
	 * @return whether the editor is currently editing a bean or not
	 */
	public boolean isEditing()
	{
		return getEditedModel() != null;
	}

	@Override
	public void setDelegate(final EditorDelegate<T> delegate)
	{
		this.delegate = delegate;
	}

	@Override
	public void flush()
	{
		// OSEF
	}

	@Override
	public void onPropertyChange(final String... paths)
	{
		// OSEF
	}

	@Override
	public void setValue(final T value)
	{
		this.editedModel = value;
	}

	/**
	 * @return the dirty
	 */
	public boolean isDirty()
	{
		return dirty;
	}

	/**
	 * @param dirty
	 *           the dirty to set
	 */
	public void setDirty(final boolean dirty)
	{
		this.dirty = dirty;
	}

}
